const express = require('express');
const multer = require('multer');
const path = require('path');
const fs = require('fs').promises;
const router = express.Router();

// 配置 multer 存储
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/') // 确保 uploads 目录存在
  },
  filename: function (req, file, cb) {
    // 生成唯一文件名：时间戳 + 原始文件名
    const timestamp = Date.now();
    const sanitizedName = file.originalname.replace(/[^a-zA-Z0-9.\-_]/g, '_');
    cb(null, `${timestamp}_${sanitizedName}`);
  }
});

// 文件过滤器（可选，用于限制文件类型）
const fileFilter = (req, file, cb) => {
  // 这里可以添加文件类型限制
  // 例如：只允许图片
  // if (file.mimetype.startsWith('image/')) {
  //   cb(null, true);
  // } else {
  //   cb(new Error('只允许上传图片文件！'), false);
  // }
  
  // 目前允许所有类型的文件
  cb(null, true);
};

// 配置 multer
const upload = multer({
  storage: storage,
  fileFilter: fileFilter,
  limits: {
    fileSize: 50 * 1024 * 1024, // 限制文件大小为 50MB
    files: 10 // 限制同时上传的文件数量为 10 个
  }
});

// 处理单个或多个文件上传
router.post('/', upload.array('files', 10), async (req, res) => {
  try {
    // 添加请求日志，便于调试苹果设备问题
    console.log('Upload request received:', {
      userAgent: req.get('User-Agent'),
      origin: req.get('Origin'),
      contentType: req.get('Content-Type'),
      contentLength: req.get('Content-Length'),
      filesCount: req.files ? req.files.length : 0
    });

    if (!req.files || req.files.length === 0) {
      console.log('No files uploaded');
      return res.status(400).json({
        success: false,
        message: '没有文件被上传'
      });
    }

    // 整理上传的文件信息
    const uploadedFiles = req.files.map(file => ({
      originalName: file.originalname,
      filename: file.filename,
      path: file.path,
      size: file.size,
      mimetype: file.mimetype,
      uploadTime: new Date().toISOString(),
      url: `/uploads/${file.filename}` // 可访问的URL
    }));

    res.json({
      success: true,
      message: `成功上传 ${uploadedFiles.length} 个文件`,
      files: uploadedFiles
    });

  } catch (error) {
    console.error('文件上传错误:', error);
    res.status(500).json({
      success: false,
      message: '文件上传失败',
      error: error.message
    });
  }
});

// 获取已上传文件列表
router.get('/list', async (req, res) => {
  try {
    const files = await fs.readdir('uploads');
    const fileList = [];

    for (const file of files) {
      try {
        const filePath = path.join('uploads', file);
        const stats = await fs.stat(filePath);
        
        fileList.push({
          name: file,
          size: stats.size,
          uploadTime: stats.birthtime.toISOString(),
          modifiedTime: stats.mtime.toISOString(),
          url: `/uploads/${file}` // 可访问的URL
        });
      } catch (err) {
        console.error(`获取文件 ${file} 信息失败:`, err);
      }
    }

    // 按上传时间倒序排列
    fileList.sort((a, b) => new Date(b.uploadTime) - new Date(a.uploadTime));

    res.json({
      success: true,
      files: fileList,
      count: fileList.length
    });

  } catch (error) {
    console.error('获取文件列表错误:', error);
    res.status(500).json({
      success: false,
      message: '获取文件列表失败',
      error: error.message
    });
  }
});

// 下载文件
router.get('/download/:filename', async (req, res) => {
  try {
    const filename = req.params.filename;
    const filePath = path.join('uploads', filename);

    // 检查文件是否存在
    try {
      await fs.access(filePath);
    } catch (err) {
      return res.status(404).json({
        success: false,
        message: '文件不存在'
      });
    }

    // 设置响应头
    res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(filename)}"`);
    
    // 发送文件
    res.sendFile(path.resolve(filePath));

  } catch (error) {
    console.error('文件下载错误:', error);
    res.status(500).json({
      success: false,
      message: '文件下载失败',
      error: error.message
    });
  }
});

// 删除文件
router.delete('/:filename', async (req, res) => {
  try {
    const filename = req.params.filename;
    const filePath = path.join('uploads', filename);

    // 检查文件是否存在
    try {
      await fs.access(filePath);
    } catch (err) {
      return res.status(404).json({
        success: false,
        message: '文件不存在'
      });
    }

    // 删除文件
    await fs.unlink(filePath);

    res.json({
      success: true,
      message: '文件删除成功',
      filename: filename
    });

  } catch (error) {
    console.error('文件删除错误:', error);
    res.status(500).json({
      success: false,
      message: '文件删除失败',
      error: error.message
    });
  }
});

// 错误处理中间件
router.use((error, req, res, next) => {
  if (error instanceof multer.MulterError) {
    if (error.code === 'LIMIT_FILE_SIZE') {
      return res.status(400).json({
        success: false,
        message: '文件大小超过限制（最大50MB）'
      });
    }
    if (error.code === 'LIMIT_FILE_COUNT') {
      return res.status(400).json({
        success: false,
        message: '文件数量超过限制（最多10个）'
      });
    }
  }

  res.status(500).json({
    success: false,
    message: '服务器错误',
    error: error.message
  });
});

module.exports = router;
